﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows;
using WpfApplication2.SindicatoWebService;
using WpfApplication2.Helpers;
using WpfApplication2.Views.HistoriaClinica;
using WpfApplication2.Views;

namespace WpfApplication2.ViewModels.Afiliado
{
    public class ConsultarHistoriaViewModel : ViewModel
    {
        #region properties

        public Instancias Instancias
        {
            get;
            set;
        }

        public HistoriaClinicaDTO Historia
        {
            get
            {
                return historia;
            }
            set
            {
                historia = value;
                RaisePropertyChanged("Historia");
            }
        }
        private HistoriaClinicaDTO historia;

        public AfiliadoDTO Afiliado { get; set; }

        public SindicatoWebService.Service1SoapClient WS;

        public string HabitosToxicos
        {
            get
            {
                return habitosToxicos;
            }
            set
            {
                if (habitosToxicos != value)
                {
                    habitosToxicos = value;
                    RaisePropertyChanged("HabitosToxicos");
                }
            }
        }
        private string habitosToxicos;

        public Visibility AntecedentesVisibility
        {
            get
            {
                return antecedentesVisiblity;
            }
            set
            {
                if (antecedentesVisiblity != value)
                {
                    antecedentesVisiblity = value;
                    RaisePropertyChanged("AntecedentesVisibility");
                }
            }
        }
        private Visibility antecedentesVisiblity;

        public Visibility NoAntecedentesVisibility
        {
            get
            {
                return noAntecedentesVisiblity;
            }
            set
            {
                if (noAntecedentesVisiblity != value)
                {
                    noAntecedentesVisiblity = value;
                    RaisePropertyChanged("NoAntecedentesVisibility");
                }
            }
        }
        private Visibility noAntecedentesVisiblity;

        public string NombreyApellido
        {
            get
            {
                return nombreyApellido;
            }
            set
            {
                if (nombreyApellido != value)
                {
                    nombreyApellido = value;
                    RaisePropertyChanged("NombreyApellido");
                }
            }
        }
        private string nombreyApellido;

        

        #endregion

        public ConsultarHistoriaViewModel(Instancias instancias, AfiliadoDTO afiliado, HistoriaClinicaDTO historia)
        {
            WS = new Service1SoapClient();
            Instancias = instancias;
            Historia = historia;
            Afiliado = afiliado;
            CompletarDatosHistoria();
            ArmarDatosComplejos();
            NombreyApellido = String.Format("({0} {1})", Afiliado.Nombre.Trim(), Afiliado.Apellido.Trim());
        }

        private void CompletarDatosHistoria()
        {
            Historia.Antecedentes = WS.ObtenerAntecedentesPorHistoriaId(Historia.Id);
            Historia.HabitosToxicos = WS.ObtenerHabitosPorHistoriaId(Historia.Id);
            Historia.EvolucionesClinicas = WS.ObtenerEvolucionesPorHistoriaId(Historia.Id);
        }

        private void ArmarDatosComplejos()
        {
            //Habitos Tóxicos
            var hab = string.Empty;
            foreach (var h in Historia.HabitosToxicos)
            {
                hab += h.NombreHabito + ", ";
            }
            HabitosToxicos = hab.Length > 0 ? hab.Substring(0, hab.Length - 2) : "No tiene.";


            //Antecedentes Personales
            AntecedentesVisibility = Historia.Antecedentes.Count() > 0 ? Visibility.Visible : Visibility.Collapsed;
            NoAntecedentesVisibility = Historia.Antecedentes.Count() == 0 ? Visibility.Visible : Visibility.Collapsed;
        }

        #region Editar Historia Clinica

        private DelegateCommand editarHistoriaCommand;

        public ICommand EditarHistoriaCommand
        {
            get
            {
                if (editarHistoriaCommand == null)
                {
                    editarHistoriaCommand = new DelegateCommand(EditarHistoria, CanExecute);
                }
                return editarHistoriaCommand;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void EditarHistoria()
        {
            var historia = WS.BuscarHistoriaPorAfiliadoId(Afiliado.Id);
            Instancias.FrameContent.Content = new EditarHistoria(Instancias, Afiliado, historia);
        }

        #endregion

        #region Eliminar Historia Clinica

        private DelegateCommand eliminarHistoriaCommand;

        public ICommand EliminarHistoriaCommand
        {
            get
            {
                if (eliminarHistoriaCommand == null)
                {
                    eliminarHistoriaCommand = new DelegateCommand(EliminarHistoria, CanExecute);
                }
                return eliminarHistoriaCommand;
            }
        }
        
        private void EliminarHistoria()
        {
            var confirm = Instancias.Confirmacion.ShowHandlerDialog("Está seguro que desea eliminar la historia clínica?");
            if (confirm)
            {
                WS.EliminarHistoria(Historia.Id);
                Instancias.ModalDialog.ShowHandlerDialog("La historia clínica se ha eliminado correctamente.");
                Instancias.FrameContent.Content = new Home();
            }
        }

        #endregion
        
    }
}
